|
In computer science, denormal numbers or denormalized numbers (now often called subnormal numbers) fill the underflow gap around zero in floating-point arithmetic. Any non-zero number with magnitude smaller than the smallest normal number is 'subnormal'. In a normal floating-point value, there are no leading zeros in the significand; instead leading zeros are moved to the exponent. So 0.0123 would be written as 1.23 × 10−2. Denormal numbers are numbers where this representation would result in an exponent that is below the minimum exponent (the exponent usually having a limited range). Such numbers are represented using leading zeros in the significand. The significand (or mantissa) of an IEEE floating point number is the part of a floating-point number that represents the significant digits. For a positive normalised number it can be represented as ''m''0.''m''1''m''2''m''3...''m''''p''-2''m''''p''-1 (where ''m'' represents a significant digit and ''p'' is the precision, and ''m''0'''' is non-zero). Notice that for a binary radix, the leading binary digit is always 1. In a denormal number, since the exponent is the least that it can be, zero is the leading significand digit (0.''m''1''m''2''m''3...''m''''p''-2''m''''p''-1), allowing the representation of numbers closer to zero than the smallest normal number. By filling the underflow gap like this, significant digits are lost, but not as abruptly as when using the ''flush to zero on underflow'' approach (discarding all significant digits when underflow is reached). Hence the production of a denormal number is sometimes called gradual underflow because it allows a calculation to lose precision slowly when the result is small. In IEEE 754-2008, denormal numbers are renamed ''subnormal numbers'', and are supported in both binary and decimal formats. In binary interchange formats, subnormal numbers are encoded with a biased exponent of 0, but are interpreted with the value of the smallest allowed exponent, which is one greater (i.e., as if it were encoded as a 1). In decimal interchange formats they require no special encoding because the format supports unnormalized numbers directly. Mathematically speaking, the normalized floating point numbers of a given sign are roughly logarithmically spaced, and as such any finite-sized normal float cannot include zero. The denormal floats are a linearly-spaced set of values which span the gap between the negative and positive normal floats. == Background == Denormal numbers provide the guarantee that addition and subtraction of floating-point numbers never underflows; two nearby floating-point numbers always have a representable non-zero difference. Without gradual underflow, the subtraction ''a''−''b'' can underflow and produce zero even though the values are not equal. This can, in turn, lead to division by zero errors that cannot occur when gradual underflow is used.〔(【引用サイトリンク】title=IEEE 754R meeting minutes, 2002 )〕 Denormal numbers were implemented in the Intel 8087 while the IEEE 754 standard was being written. They were by far the most controversial feature in the K-C-S format proposal that was eventually adopted,〔(An Interview with the Old Man of Floating-Point ) Reminiscences elicited from William Kahan by Charles Severance〕 but this implementation demonstrated that denormals could be supported in a practical implementation. Some implementations of floating point units do not directly support denormal numbers in hardware, but rather trap to some kind of software support. While this may be transparent to the user, it can result in calculations which produce or consume denormal numbers being much slower than similar calculations on normal numbers. 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Denormal number」の詳細全文を読む スポンサード リンク
|